UnityでWebAssemblyを動かす


概要

いいガイドがあった。

https://edom18.hateblo.jp/entry/2021/01/23/203757


見ながらやってく、ほぼただのメモだよ。



まずこのサイトでCを書きます

https://mbebenita.github.io/WasmExplorer/

適当にCで関数を書いて、wasmにコンパイルする。

スクリーンショット 2021-01-24 1.02.54.png



こんな感じのcのコードを書いて


int Something(int input)

{

  return input + 19423;

}


んでコンパイルするとこんな感じのがダウンロードできる。


something.wasm

0061 736d 0100 0000 0186 8080 8000 0160

017f 017f 0382 8080 8000 0100 0484 8080

8000 0170 0000 0583 8080 8000 0100 0106

8180 8080 0000 0796 8080 8000 0206 6d65

6d6f 7279 0200 0953 6f6d 6574 6869 6e67

0000 0a8f 8080 8000 0189 8080 8000 0020

0041 df97 016a 0b


んでこれを動かすUnity側をセットアップしていく。





c側で関数定義をして呼び出して、Unity側で同名の関数定義を書いて呼び出す~とかも自然にできる(コード無くした)


int GetParam();


int Something(int input)

{

  int s = GetParam();

  return input + 19423 + s;

}



ここまでやった上で、だいたいどんな感じかはわかったので、実現方法をよーくみてたら、まあ書いてある通りC#で書かれてるwasm executorだったんだな。

・wasmで書かれたプラットフォームフリーなRFCライブラリをUnityから呼びたい

というニーズを自分は抱えていて、

この辺でも書いたが

https://sassembla.github.io/Public/2020:12:27%2021-57-37/2020:12:27%2021-57-37.html



まあその、C#はRFCを満たしてないAPI、機能が多すぎてインターネットとお話しするときに最低な目に遭ってるからそれを金輪際避けたいという需要なんだけど、


これは次の需要を叶える必要がある。

・ゲーム用なので、ある程度高速にwasmを実行する(この時点でUnityだとNativeごとに実装を選べるといいな~ってなるからC#ではないほうがいい)


なので、そのへんも探してこないとな~と思った。